﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace NewRen.Controllers
{
    public class BeeCloudController : Controller
    {
        string appid = "cb6d787e-9c2b-48ef-9304-98eaffe6f32f";
        string appsecret = "6b17cb0a-73b6-4906-8bcf-bd94621a8f92";
        // GET: BeeCloud
        public void Index()
        {

        }
        /*
        /// <summary>
        /// 支付
        /// </summary>
        /// <param name="channel">渠道类型
        ///     根据不同场景选择不同的支付方式
        ///     必填
        ///     可以通过enum BCPay.PayChannel获取
        ///     channel的参数值含义：
        ///     WX_APP: 微信手机APP支付
        ///     WX_NATIVE: 微信公众号二维码支付
        ///     WX_JSAPI: 微信公众号支付
        ///     ALI_APP: 支付宝APP支付
        ///     ALI_WEB: 支付宝网页支付 ALI_QRCODE: 支付宝内嵌二维码支付
        ///     UN_APP: 银联APP支付
        ///     UN_WEB: 银联网页支付
        /// </param>
        /// <param name="totalFee">订单总金额
        ///     只能为整数，单位为分
        ///     必填
        /// </param>
        /// <param name="title">订单标题
        ///     32个字节内，最长支持16个汉字
        ///     必填
        /// </param>
        /// <param name="optional">附加数据
        ///     用户自定义的参数，将会在webhook通知中原样返回，该字段主要用于商户携带订单的自定义数据
        ///     {"key1":"value1","key2":"value2",...}
        ///     可空
        /// </param>
        /// <param name="returnUrl">同步返回页面
        ///     支付渠道处理完请求后,当前页面自动跳转到商户网站里指定页面的http路径。
        ///     当channel 参数为 ALI_WEB 或 ALI_QRCODE 或 UN_WEB时为必填
        /// </param>
        /// <param name="openId">用户相对于微信公众号的唯一id
        ///     例如'0950c062-5e41-44e3-8f52-f89d8cf2b6eb'
        ///     微信公众号支付(WX_JSAPI)的必填参数
        /// </param>
        /// <param name="showURL">商品展示地址
        ///     以http://开头,例如'http://beecloud.cn'
        ///     支付宝网页支付(ALI_WEB)的选填参数
        /// </param>
        /// <param name="qrPayMode">二维码类型
        ///     支付宝内嵌二维码支付(ALI_QRCODE)的选填参数
        ///     二维码类型含义
        ///     0： 订单码-简约前置模式,对应 iframe 宽度不能小于 600px, 高度不能小于 300px
        ///     1： 订单码-前置模式,对应 iframe 宽度不能小于 300px, 高度不能小于 600px
        ///     3： 订单码-迷你前置模式,对应 iframe 宽度不能小于 75px, 高度不能小于 75px
        /// </param>
        /// <returns>
        ///     BCPayResult， 根据不同的支付渠道有各自对应的result类型
        /// </returns>
        public void Pay(string type, string channel, int totalFee, string title, string returnUrl, string qrPayMode, Dictionary<string, string> optional, string openId, string showURL)
        {
            string type_channel = "";
            if (type == "alipay")
            {
                type_channel = BCPay.PayChannel.ALI_WEB.ToString();
            }
            else if (type == "wechatQr")
            {
                type_channel = BCPay.PayChannel.WX_NATIVE.ToString();
            }
            else if (type == "unionpay")
            {
                type_channel = BCPay.PayChannel.UN_WEB.ToString();
            }
            else if (type == "qralipay")
            {
                type_channel = BCPay.PayChannel.ALI_QRCODE.ToString();
            }
            else if (type == "aliwappay")
            {
                type_channel = BCPay.PayChannel.ALI_WAP.ToString();
            }
            else
            {
                type_channel = BCPay.PayChannel.WX_JSAPI.ToString();
            }
            BeeCloud.BeeCloud.registerApp(appid, appsecret);
            BCPayResult result = BCPay.BCPayByChannel(type_channel, totalFee, BCUtil.GetUUID(), title, optional, returnUrl, openId, showURL, qrPayMode);
            if (result.resultCode == 0)
            {
                BCUnWebPayResult payResult = result as BCUnWebPayResult;
            }
        }

        /// <summary>
        /// 退款
        /// </summary>
        /// <param name="channel">渠道类型   
        ///     根据不同场景选择不同的支付方式
        ///     必填
        ///     可以通过enum BCPay.RefundChannel获取
        ///     ALI:支付宝
        ///     WX:微信
        ///     UN:银联
        /// </param>
        /// <param name="refundNo">商户退款单号
        ///     格式为:退款日期(8位) + 流水号(3~24 位)。不可重复，且退款日期必须是当天日期。流水号可以接受数字或英文字符，建议使用数字，但不可接受“000”。
        ///     必填
        ///     例如：201506101035040000001
        /// </param>
        /// <param name="billNo">商户订单号
        ///     32个字符内，数字和/或字母组合，确保在商户系统中唯一
        ///     DIRECT_REFUND和PRE_REFUND时必填
        /// </param>
        /// <param name="refundFee">退款金额
        ///     只能为整数，单位为分
        ///     DIRECT_REFUND和PRE_REFUND时必填
        /// </param>
        /// <param name="optional">附加数据
        ///     用户自定义的参数，将会在webhook通知中原样返回，该字段主要用于商户携带订单的自定义数据
        ///     选填
        ///     {"key1":"value1","key2":"value2",...}
        /// </param>
        /// <returns>
        ///     BCRefundResult
        /// </returns>
        public void Refund(string billNo, int refundFee)
        {
            BeeCloud.BeeCloud.registerApp(appid, appsecret);
            BCRefundResult refundResult = BCPay.BCRefundByChannel(BCPay.RefundChannel.ALI.ToString(), DateTime.Today.ToString("yyyyMMdd") + BCUtil.GetUUID().Substring(0, 8), billNo, refundFee, null);
            if (refundResult.resultCode == 0)
            {
                Response.Redirect(refundResult.url);
            }
        }

        /// <summary>
        /// 支付订单查询
        /// </summary>
        /// <param name="channel">渠道类型
        ///     根据不同场景选择不同的支付方式
        ///     必填
        ///     可以通过enum BCPay.QueryChannel获取
        ///     channel的参数值含义：
        ///     WX: 微信所有类型支付
        ///     WX_APP: 微信手机APP支付 
        ///     WX_NATIVE: 微信公众号二维码支付
        ///     WX_JSAPI: 微信公众号支付
        ///     ALI: 支付宝所有类型支付
        ///     ALI_APP: 支付宝APP支付
        ///     ALI_WEB: 支付宝网页支付 
        ///     ALI_QRCODE: 支付宝内嵌二维码支付
        ///     UN: 银联所有类型支付
        ///     UN_APP: 银联APP支付
        ///     UN_WEB: 银联网页支付
        /// </param>
        /// <param name="billNo">商户订单号
        /// </param>
        /// <param name="startTime">起始时间
        ///     毫秒时间戳, 13位, 可以使用BCUtil.GetTimeStamp()方法获取
        ///     选填
        /// </param>
        /// <param name="endTime">结束时间
        ///     毫秒时间戳, 13位, 可以使用BCUtil.GetTimeStamp()方法获取
        ///     选填
        /// </param>
        /// <param name="skip">查询起始位置
        ///     默认为0。设置为10表示忽略满足条件的前10条数据
        ///     选填
        /// </param>
        /// <param name="limit">查询的条数
        ///     默认为10，最大为50。设置为10表示只返回满足条件的10条数据
        ///     选填
        /// </param>
        /// <returns></returns>
        public BCPayQueryResult BCPayQuery(string channel, string billNo, long? startTime, long? endTime, int? skip = 0, int? limit = 50)
        {
            BeeCloud.BeeCloud.registerApp(appid, appsecret);
            BCPayQueryResult result = BCPay.BCPayQueryByCondition(channel, billNo, startTime, endTime, skip, limit);
            return result;
        }

        /// <summary>
        /// 退款订单查询
        /// </summary>
        /// <param name="channel">渠道类型
        ///     根据不同场景选择不同的支付方式
        ///     必填
        ///     可以通过enum BCPay.QueryChannel获取
        ///     channel的参数值含义：
        ///     WX: 微信所有类型支付
        ///     WX_APP: 微信手机APP支付
        ///     WX_NATIVE: 微信公众号二维码支付
        ///     WX_JSAPI: 微信公众号支付
        ///     ALI: 支付宝所有类型支付
        ///     ALI_APP: 支付宝APP支付
        ///     ALI_WEB: 支付宝网页支付 
        ///     ALI_QRCODE: 支付宝内嵌二维码支付
        ///     UN: 银联所有类型支付
        ///     UN_APP: 银联APP支付
        ///     UN_WEB: 银联网页支付</param>
        /// <param name="billNo">商户订单号
        /// </param>
        /// <param name="refundNo">商户退款单号
        /// </param>
        /// <param name="startTime">起始时间
        ///     毫秒时间戳, 13位, 可以使用BCUtil.GetTimeStamp()方法获取
        ///     选填</param>
        /// <param name="endTime">结束时间
        ///     毫秒时间戳, 13位, 可以使用BCUtil.GetTimeStamp()方法获取
        ///     选填</param>
        /// <param name="skip">查询起始位置
        ///     默认为0。设置为10表示忽略满足条件的前10条数据
        ///     选填
        /// </param>
        /// <param name="limit">查询的条数
        ///     默认为10，最大为50。设置为10表示只返回满足条件的10条数据
        ///     选填
        /// </param>
        /// <returns>
        ///     BCRefundQuerytResult
        /// </returns>
        public BCRefundQuerytResult BCRefundQuery(string channel, string billNo, string refundNo, long? startTime, long? endTime, int? skip, int? limit)
        {
            BeeCloud.BeeCloud.registerApp(appid, appsecret);
            BCRefundQuerytResult result = BCPay.BCRefundQueryByCondition(channel, billNo, refundNo, startTime, endTime, skip, limit);
            return result;
        }

        /// <summary>
        ///退款状态查询"(只支持微信)
        /// </summary>
        /// <param name="channel">渠道类型
        ///     暂时只能填WX
        /// </param>
        /// <param name="refundNo">商户退款单号
        /// </param>
        /// <returns>
        ///     BCRefundStatusQueryResult
        /// </returns>
        public BCRefundStatusQueryResult BCRefundStatus(string channel, string refundNo)
        {
            BeeCloud.BeeCloud.registerApp(appid, appsecret);
            BCRefundStatusQueryResult result = BCPay.BCRefundStatusQuery(channel, refundNo);
            return result;
        }*/
    }
}